#ifndef EVENTHANDLER_H_
#define EVENTHANDLER_H_

#include <SDL.h>

/* The Current List of Events that are handled in Game:
    * KeyBoard input Up and Down
    * MouseClicks
    * Joystick Axis
    * Joystick Buttons 
    * Mouse Motions
    * Screen re-sizes
*/
class EventHandler
{
public:
    /* Pure Virtual Destructor: Assures call to correct Destructor */
    virtual ~EventHandler() = 0 {};

    /* Base Implementation: NOT VIRTUAL 
     * All Event Handlers will have this function called if they
     * are in the event Pollers data structure*/
	void HandleEvent(SDL_Event* Event);

    /* The base implementation ( {} ) will be called unless
     * the derived class overides this version, which ensures
     * that only wanted input is passed to the event handler */
	virtual void OnKeyBoardUpEvent(const SDL_KeyboardEvent&){};
    virtual void OnKeyBoardDownEvent(const SDL_KeyboardEvent&){};
	virtual void OnJoystickAxisEvent(const SDL_JoyAxisEvent&){};
	virtual void OnMouseButton(const SDL_MouseButtonEvent& Event){};
    virtual void OnMouseMotion(const SDL_MouseMotionEvent& Event){};
    virtual void OnJoyButtonEvent(const SDL_JoyButtonEvent& Event){};
    //has a base impl
    virtual void OnResizeEvent(const SDL_ResizeEvent& Event);
};

#endif